Skip to content

feat(workflows): add frequency cap hold hours setting - #127592

Merged
trunk-io[bot] merged 4 commits into
masterfrom
posthog/workflows-frequency-cap-hold-setting
Nov 3, 2026
Merged

trunk-io[bot] merged 4 commits into
masterfrom
posthog/workflows-frequency-cap-hold-setting

Conversation

@mayteio

@mayteio mayteio commented Nov 2, 2026 •

Copy link
Copy Markdown
Contributor

Problem

  • Teams moving onboarding sequences into Workflows lose capped marketing emails, because a capped send is skipped at once.
  • The Node worker in #127579 reads a new column, so this migration deploys first.

Changes

Frequency cap settings with the new hold hours field

The field is new, so there is no before screenshot.

How did you test this code?

Test rationale: test_workflow_sending_rules.py now round-trips the field, so it fails if a serializer drops it.

Release status

  • No feature flag controls this change

Docs update

  • None.

🤖 Agent context

Autonomy: Human-driven (agent-assisted)

Agent: Claude Code, claude-opus-5-5

Skills: /django-migrations, /improving-drf-endpoints, /writing-tests, /stacking-prs, /writing-pr-descriptions

More context for AI agents

Created with PostHog Desktop from a PostHog Desktop task

🤖 Generated with Claude Code

Adds marketing_frequency_cap_hold_hours to the team workflows config, the project settings and sending rules serializers, and the generated types. Nothing reads it yet: the worker change that holds capped messages ships in the next layer, after this migration deploys.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

Generated-By: PostHog Desktop
Task-Id: 436ae568-8289-4257-b029-99ab5ab69aac
@mayteio mayteio self-assigned this Nov 2, 2026
@trunk-io

trunk-io Bot commented Nov 2, 2026 •

Copy link
Copy Markdown

😎 This pull request was merged.

@github-actions

github-actions Bot commented Nov 2, 2026 •

Copy link
Copy Markdown
Contributor

🤖 CI report

⚠️ Trunk lane — backend Python lane

This PR is assigned to the backend Python lane. It runs backend Python tests and may merge in parallel with PRs in other lanes.

⚠️ Complexity (TypeScript) — 2 functions above the limit (max 15)

Cyclomatic complexity above the limit in changed typescript files (10 for production files, 15 for test files). Warn only: worth simplifying when you next touch these functions.

Function Location Complexity Limit
<anonymous> products/workflows/frontend/Workflows/workflowMetricsSummaryLogic.ts:1598 15 10
WorkflowsFrequencyCapSettings products/workflows/frontend/scenes/settings/WorkflowsFrequencyCapSettings.tsx:21 12 10
✅ Duplication (Python) — clean

New Python code duplication introduced by this branch. Fails at 70+ tokens in app code, or 150+ tokens when both copies live in test files. Advisory while the gate proves itself: extract a shared helper instead of copying.

✅ Duplication (TypeScript) — clean

New TypeScript code duplication introduced by this branch. Fails at 70+ tokens in app code, or 150+ tokens when both copies live in test files. Advisory while the gate proves itself: extract a shared helper instead of copying.

⚠️ Bundle size — 🔺 +563.7 KiB (+0.7%)

Uncompressed size of every built .js bundle, compared against the base branch.

Total: 76.69 MiB · 🔺 +563.7 KiB (+0.7%)

File Size Δ vs base
exporter/src/queries/nodes/InsightViz/InsightViz.js 365.3 KiB 🔺 +365.3 KiB (new)
render-query/src/render-query/render-query.js 21.12 MiB 🟢 -169.1 KiB (-0.8%)
exporter/_parent/products/metrics/frontend/nodes/nodes.js 125.3 KiB 🔺 +125.3 KiB (new)
posthog-app/src/queries/nodes/DataVisualization/DataVisualization.js 57.3 KiB 🔺 +57.3 KiB (new)
exporter/src/queries/nodes/DataVisualization/DataVisualization.js 55.0 KiB 🔺 +55.0 KiB (new)
posthog-app/_parent/products/product_analytics/frontend/insights/explainChart/InsightExplainChart.js 38.1 KiB 🔺 +38.1 KiB (new)
exporter/_parent/products/product_analytics/frontend/insights/explainChart/InsightExplainChart.js 33.6 KiB 🔺 +33.6 KiB (new)
posthog-app/src/scenes/App.js 9.8 KiB 🟢 -20.0 KiB (-67.1%)
posthog-app/_parent/products/metrics/frontend/nodes/nodes.js 14.6 KiB 🔺 +14.6 KiB (new)
posthog-app/src/queries/nodes/InsightViz/InsightViz.js 13.8 KiB 🔺 +13.8 KiB (new)
posthog-app/src/queries/nodes/SavedInsight/SavedInsight.js 13.5 KiB 🔺 +13.5 KiB (new)
infrastructure-admin/_parent/products/tasks/frontend/infrastructure/infrastructure-admin.js 916.3 KiB 🟢 -11.0 KiB (-1.2%)
posthog-app/_parent/products/endpoints/frontend/nodes/nodes.js 9.9 KiB 🔺 +9.9 KiB (new)
exporter/src/queries/nodes/SavedInsight/SavedInsight.js 9.1 KiB 🔺 +9.1 KiB (new)
posthog-app/_parent/products/product_analytics/frontend/insights/explainChart/ExplainChartButton.js 8.9 KiB 🔺 +8.9 KiB (new)
posthog-app/_parent/products/product_analytics/frontend/insights/explainChart/ExplainChartAgentBridge.js 8.5 KiB 🔺 +8.5 KiB (new)
exporter/_parent/products/endpoints/frontend/nodes/nodes.js 8.5 KiB 🔺 +8.5 KiB (new)
posthog-app/_parent/products/product_analytics/frontend/insights/explainChart/ExplainChartAIAnalysisFallback.js 8.3 KiB 🔺 +8.3 KiB (new)
posthog-app/_parent/products/data_catalog/frontend/DataCatalogScene.js 45.3 KiB 🔺 +8.0 KiB (+21.5%)
exporter/_parent/products/product_analytics/frontend/insights/explainChart/ExplainChartButton.js 6.4 KiB 🔺 +6.4 KiB (new)
posthog-app/src/queries/nodes/WebOverview/WebOverview.js 6.2 KiB 🔺 +6.2 KiB (new)
exporter/_parent/products/product_analytics/frontend/insights/explainChart/ExplainChartAgentBridge.js 6.1 KiB 🔺 +6.1 KiB (new)
exporter/src/scenes/debug/HogDebug.js 5.9 KiB 🔺 +5.9 KiB (new)
exporter/_parent/products/product_analytics/frontend/insights/explainChart/ExplainChartAIAnalysisFallback.js 5.9 KiB 🔺 +5.9 KiB (new)
posthog-app/_parent/products/metrics/frontend/MetricsScene.js 99.4 KiB 🔺 +4.6 KiB (+4.8%)
exporter/src/queries/nodes/WebOverview/WebOverview.js 4.4 KiB 🔺 +4.4 KiB (new)
exporter/src/exporter/scenes/ExporterNotebookScene.js 3.93 MiB 🔺 +4.0 KiB (+0.1%)
posthog-app/src/scenes/debug/HogDebug.js 3.7 KiB 🔺 +3.7 KiB (new)
exporter/src/queries/QueryEditor/QueryEditor.js 3.5 KiB 🔺 +3.5 KiB (new)
posthog-app/_parent/products/signals/frontend/inbox/InboxScene.js 503.0 KiB 🟢 -3.0 KiB (-0.6%)
posthog-app/src/queries/nodes/WebVitals/WebVitals.js 19.7 KiB 🟢 -2.6 KiB (-11.5%)
posthog-app/src/queries/Query/Query.js 12.6 KiB 🟢 -2.6 KiB (-16.9%)
posthog-app/src/scenes/web-analytics/SessionAttributionExplorer/SessionAttributionExplorerScene.js 18.7 KiB 🟢 -2.6 KiB (-12.0%)
posthog-app/_parent/products/dashboards/frontend/widgets/metrics/MetricsTableWidget.js 12.9 KiB 🟢 -2.5 KiB (-16.2%)
posthog-app/_parent/products/posthog_ai/frontend/components/tool/widgets/CreateInsightWidget.js 13.5 KiB 🟢 -2.5 KiB (-15.6%)
posthog-app/_parent/products/posthog_ai/frontend/components/tool/widgets/QueryWidget.js 13.5 KiB 🟢 -2.5 KiB (-15.6%)
posthog-app/_parent/products/autoresearch/frontend/AutoresearchPipelineScene.js 129.7 KiB 🟢 -2.5 KiB (-1.9%)
posthog-app/_parent/products/persons/frontend/pages/PersonsScene.js 17.1 KiB 🟢 -2.5 KiB (-12.6%)
posthog-app/src/scenes/activity/explore/EventsScene.js 17.2 KiB 🟢 -2.5 KiB (-12.5%)
posthog-app/src/scenes/activity/explore/SessionsScene.js 16.8 KiB 🟢 -2.5 KiB (-12.7%)
posthog-app/_parent/products/ai_observability/frontend/tags/AIObservabilityTagsScene.js 21.0 KiB 🟢 -2.4 KiB (-10.3%)
posthog-app/_parent/products/endpoints/frontend/EndpointsScene.js 43.3 KiB 🟢 -2.4 KiB (-5.3%)
posthog-app/_parent/products/early_access_features/frontend/EarlyAccessFeature.js 14.2 KiB 🟢 -2.4 KiB (-14.4%)
posthog-app/src/scenes/web-analytics/WebAnalyticsInsight.js 14.2 KiB 🟢 -2.4 KiB (-14.4%)
posthog-app/src/scenes/debug/DebugScene.js 33.1 KiB 🟢 -2.4 KiB (-6.7%)
posthog-app/_parent/products/dashboards/frontend/widgets/AddWidgetModal.js 34.3 KiB 🟢 -2.4 KiB (-6.4%)
posthog-app/src/scenes/authentication/shared/PasskeyLoginButton.js 2.3 KiB 🔺 +2.3 KiB (new)
posthog-app/_parent/products/mcp_analytics/frontend/MCPAnalyticsScene.js 205.1 KiB 🟢 -2.3 KiB (-1.1%)
posthog-app/_parent/products/ai_observability/frontend/tags/AIObservabilityTagScene.js 41.1 KiB 🟢 -2.2 KiB (-5.2%)
posthog-app/_parent/products/ai_observability/frontend/prompts/LLMPromptScene.js 59.5 KiB 🟢 -2.0 KiB (-3.3%)
posthog-app/_parent/products/groups/frontend/pages/Groups.js 17.0 KiB 🟢 -2.0 KiB (-10.5%)
posthog-app/src/scenes/product-tours/ProductTour.js 194.4 KiB 🟢 -2.0 KiB (-1.0%)
posthog-app/_parent/products/conversations/frontend/components/SidePanel/SidePanelSupportIcon.js 2.0 KiB 🔺 +2.0 KiB (new)
posthog-app/_parent/products/replay_vision/frontend/replay_scanners/components/ScannerScoutsTab.js 24.3 KiB 🟢 -2.0 KiB (-7.5%)
posthog-app/src/scenes/cohorts/Cohort.js 52.7 KiB 🟢 -1.9 KiB (-3.5%)
posthog-app/_parent/products/replay_vision/frontend/replay_scanners/ReplayScannersScene.js 97.3 KiB 🟢 -1.9 KiB (-1.9%)
exporter/_parent/products/workflows/frontend/Workflows/Workflow.js 234.7 KiB 🔺 +1.8 KiB (+0.8%)
posthog-app/_parent/products/actions/frontend/pages/Action.js 15.6 KiB 🟢 -1.8 KiB (-10.2%)
posthog-app/_parent/products/replay_vision/frontend/replay_scanners/ReplayScanner.js 74.9 KiB 🟢 -1.8 KiB (-2.3%)
posthog-app/src/scenes/hog-functions/HogFunctionScene.js 71.9 KiB 🟢 -1.8 KiB (-2.4%)
posthog-app/src/scenes/web-analytics/WebAnalyticsScene.js 318.6 KiB 🟢 -1.8 KiB (-0.5%)
posthog-app/src/scenes/data-management/definition/DefinitionView.js 41.6 KiB 🟢 -1.7 KiB (-4.0%)
exporter/src/scenes/authentication/shared/PasskeyLoginButton.js 1.6 KiB 🔺 +1.6 KiB (new)
posthog-app/_parent/products/product_analytics/frontend/insights/insightScene/InsightScene.js 70.0 KiB 🟢 -1.6 KiB (-2.3%)
posthog-app/src/scenes/surveys/Survey.js 17.8 KiB 🟢 -1.6 KiB (-8.4%)
posthog-app/_parent/products/conversations/frontend/scenes/ticket/SupportTicketScene.js 78.0 KiB 🟢 -1.6 KiB (-2.0%)
posthog-app/src/queries/QueryEditor/QueryEditor.js 1.5 KiB 🔺 +1.5 KiB (new)
posthog-app/_parent/products/error_tracking/frontend/scenes/ErrorTrackingScene/ErrorTrackingScene.js 78.1 KiB 🟢 -1.2 KiB (-1.5%)
posthog-app/_parent/products/cross_project_dashboards/frontend/CrossProjectDashboardScene.js 47.8 KiB 🟢 -1.2 KiB (-2.4%)
exporter/src/queries/nodes/WebVitals/WebVitals.js 14.9 KiB 🟢 -1.2 KiB (-7.2%)
exporter/src/queries/Query/Query.js 8.2 KiB 🟢 -1.2 KiB (-12.4%)
exporter/_parent/products/dashboards/frontend/widgets/metrics/MetricsTableWidget.js 8.5 KiB 🟢 -1.1 KiB (-11.4%)
exporter/_parent/products/posthog_ai/frontend/components/tool/widgets/CreateInsightWidget.js 9.0 KiB 🟢 -1.1 KiB (-10.8%)
exporter/_parent/products/posthog_ai/frontend/components/tool/widgets/QueryWidget.js 9.1 KiB 🟢 -1.1 KiB (-10.8%)
posthog-app/_parent/products/customer_analytics/frontend/CustomerAnalyticsScene.js 16.9 KiB 🟢 -1.1 KiB (-6.1%)
posthog-app/_parent/products/customer_analytics/frontend/scenes/CustomerAnalyticsAccountScene/CustomerAnalyticsAccountScene.js 69.3 KiB 🟢 -1.1 KiB (-1.6%)
posthog-app/src/scenes/experiments/Experiment.js 425.3 KiB 🟢 -1.1 KiB (-0.2%)
posthog-app/src/scenes/project-homepage/today/TodayHome.js 29.4 KiB 🔺 +1.0 KiB (+3.7%)
exporter/src/scenes/web-analytics/WebAnalyticsInsight.js 56.0 KiB 🟢 -1.0 KiB (-1.8%)
posthog-app/src/scenes/max/Thread.js 24.8 KiB 🟢 -1.0 KiB (-4.0%)
exporter/_parent/products/dashboards/frontend/widgets/AddWidgetModal.js 29.0 KiB 🟢 -1020 B (-3.3%)
posthog-app/src/scenes/max/components/AiFirstMaxInstance.js 25.5 KiB 🟢 -1020 B (-3.8%)
posthog-app/src/scenes/max/Max.js 39.3 KiB 🟢 -1020 B (-2.5%)

Posted automatically by build-bundle-size-report · uncompressed bytes from dist-report

✅ Eager graph — within budget

How much code each root ships on the eager path — downloaded and parsed before the surface is interactive. Measured from the esbuild output chunks (post-tree-shake, static imports only); lazy import() / React.lazy chunks are not counted.

Root Eager (shipped) Δ vs base Budget
entry (logged-out pages, app bootstrap)
src/index.tsx
1.01 MiB · 25 files 🔺 +2.6 KiB (+0.2%) █████████░ 88.4% of 1.14 MiB
logged-out boot: index + App + bootApp (preloaded by every page, including /login)
src/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts
2.99 MiB · 622 files 🔺 +3.3 KiB (+0.1%) ██████████ 98.5% of 3.03 MiB
authenticated shell (every logged-in page)
src/scenes/AuthenticatedShell.tsx
3.86 MiB · 1,238 files 🟢 -140.1 KiB (-3.4%) ██████████ 96.3% of 4.01 MiB
dashboard scene
src/scenes/dashboard/Dashboard.tsx
8.32 MiB · 3,061 files 🟢 -1.13 MiB (-11.9%) ████████░░ 84.5% of 9.84 MiB
today home path
src/scenes/AuthenticatedShell.tsx + src/scenes/project-homepage/ProjectHomepage.tsx + src/scenes/project-homepage/today/TodayHome.tsx
4.71 MiB · 1,761 files 🟢 -214.6 KiB (-4.3%) ██████████ 95.5% of 4.93 MiB
AI-first home path
src/scenes/AuthenticatedShell.tsx + src/scenes/project-homepage/ProjectHomepage.tsx + src/scenes/project-homepage/ai-first/AiFirstHomepage.tsx
5.95 MiB · 2,258 files 🟢 -231.4 KiB (-3.7%) █████████░ 94.8% of 6.27 MiB
events scene
src/scenes/activity/explore/EventsScene.tsx
7.34 MiB · 2,624 files 🟢 -1.51 MiB (-17.1%) ████████░░ 78.0% of 9.41 MiB
web analytics scene
src/scenes/web-analytics/WebAnalyticsScene.tsx
8.25 MiB · 2,949 files 🟢 -1.40 MiB (-14.5%) ████████░░ 78.6% of 10.49 MiB
replay detail scene
src/scenes/session-recordings/detail/SessionRecordingDetail.tsx
7.40 MiB · 2,653 files 🔺 +26.8 KiB (+0.4%) █████████░ 91.0% of 8.13 MiB

🟢 node_modules/monaco-editor/ stays out of src/index.tsx
🟢 products/product_analytics/frontend/insights/activityDescriptions stays out of src/index.tsx
🟢 node_modules/@posthog/brand/dist/generated/hoggies/svg/ stays out of src/index.tsx
🟢 node_modules/@posthog/brand/dist/generated/hoggies/components/ stays out of src/index.tsx
🟢 node_modules/monaco-editor/ stays out of src/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts
🟢 src/layout/navigation-3000/navigationLogic.tsx stays out of src/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts
🟢 src/scenes/dashboard/dashboardLogic.tsx stays out of src/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts
🟢 src/lib/lemon-ui/LemonMarkdown/ stays out of src/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts
🟢 src/lib/components/RichContentEditor/ stays out of src/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts
🟢 src/lib/components/CodeSnippet/ stays out of src/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts
🟢 src/taxonomy/core-filter-definitions-by-group.json stays out of src/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts
🟢 node_modules/zod/ stays out of src/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts
🟢 src/lib/logic/billing/billingLogic.tsx stays out of src/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts
🟢 src/lib/components/ProductEmptyState/productSetupPreloadLogic.ts stays out of src/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts
🟢 node_modules/kea-test-utils/ stays out of src/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts
🟢 node_modules/monaco-editor/ stays out of src/scenes/AuthenticatedShell.tsx
🟢 products/product_analytics/frontend/insights/activityDescriptions stays out of src/scenes/AuthenticatedShell.tsx
🟢 node_modules/kea-test-utils/ stays out of src/scenes/AuthenticatedShell.tsx
🟢 products/dashboards/frontend/widgets/previews/ stays out of src/scenes/AuthenticatedShell.tsx
🟢 src/scenes/session-recordings/player/sessionRecordingPlayerLogic.ts stays out of src/scenes/AuthenticatedShell.tsx
🟢 src/layout/panel-layout/ProjectTree/menus/SessionReplayMenuItems.tsx stays out of src/scenes/AuthenticatedShell.tsx
🟢 src/taxonomy/core-filter-definitions-by-group.json stays out of src/scenes/AuthenticatedShell.tsx
🟢 src/layout/navigation/projectNoticeLogic.tsx stays out of src/scenes/AuthenticatedShell.tsx
🟢 src/layout/navigation/ImpersonationNotice/ImpersonationNotice.tsx stays out of src/scenes/AuthenticatedShell.tsx
🟢 src/scenes/cohorts/cohortSavedToast.ts stays out of src/scenes/AuthenticatedShell.tsx
🟢 products/wizard/frontend/runs/WizardRunDetailsDrawer.tsx stays out of src/scenes/AuthenticatedShell.tsx
🟢 src/layout/today/TodayShell.tsx stays out of src/scenes/AuthenticatedShell.tsx
🟢 src/layout/today/TodayContextPanelFloating.tsx stays out of src/scenes/AuthenticatedShell.tsx
🟢 src/layout/today/TodaySidePanel.tsx stays out of src/scenes/AuthenticatedShell.tsx
🟢 src/layout/today/TodayTopBar.tsx stays out of src/scenes/AuthenticatedShell.tsx
🟢 src/layout/today/todayRailItems.tsx stays out of src/scenes/AuthenticatedShell.tsx
🟢 products/subscriptions/frontend/components/Subscriptions/exportNudge/exportNudgeLogic.ts stays out of src/scenes/AuthenticatedShell.tsx
🟢 src/scenes/billing/paymentEntryLogic.ts stays out of src/scenes/AuthenticatedShell.tsx
🟢 products/conversations/frontend/components/SidePanel/sidepanelTicketsLogic.ts stays out of src/scenes/AuthenticatedShell.tsx
🟢 node_modules/zod/ stays out of src/scenes/AuthenticatedShell.tsx
🟢 src/scenes/authentication/auth/loginLogic.ts stays out of src/scenes/AuthenticatedShell.tsx
🟢 src/scenes/authentication/shared/passkeyLogic.ts stays out of src/scenes/AuthenticatedShell.tsx
🟢 src/scenes/surveys/constants.tsx stays out of src/scenes/AuthenticatedShell.tsx
🟢 node_modules/@tiptap/ stays out of src/scenes/AuthenticatedShell.tsx
🟢 node_modules/prosemirror- stays out of src/scenes/AuthenticatedShell.tsx
🟢 node_modules/re2js/ stays out of src/scenes/AuthenticatedShell.tsx
🟢 node_modules/react-markdown/ stays out of src/scenes/AuthenticatedShell.tsx
🟢 src/lib/components/Command/Command.tsx stays out of src/scenes/AuthenticatedShell.tsx
🟢 packages/quill/packages/ stays out of src/scenes/AuthenticatedShell.tsx
🟢 zod/v4/locales/de.js stays out of src/scenes/AuthenticatedShell.tsx
🟢 node_modules/@posthog/brand/dist/generated/hoggies/svg/ stays out of src/scenes/AuthenticatedShell.tsx
🟢 node_modules/@posthog/brand/dist/generated/hoggies/components/ stays out of src/scenes/AuthenticatedShell.tsx
🟢 packages/quill/packages/quill/dist/ stays out of src/scenes/dashboard/Dashboard.tsx
🟢 src/scenes/session-recordings/playlist/SessionRecordingsPlaylist.tsx stays out of src/scenes/dashboard/Dashboard.tsx
🟢 src/scenes/web-analytics/tiles/WebAnalyticsTile.tsx stays out of src/scenes/dashboard/Dashboard.tsx
🟢 src/queries/validators.js stays out of src/scenes/dashboard/Dashboard.tsx
🟢 src/queries/web-analytics-validators.js stays out of src/scenes/dashboard/Dashboard.tsx
🟢 node_modules/re2js/ stays out of src/scenes/dashboard/Dashboard.tsx
🟢 node_modules/kea-test-utils/ stays out of src/scenes/dashboard/Dashboard.tsx
🟢 src/scenes/debug/HogDebug.tsx stays out of src/scenes/dashboard/Dashboard.tsx
🟢 src/queries/QueryEditor/QueryEditor.tsx stays out of src/scenes/dashboard/Dashboard.tsx
🟢 packages/quill/packages/quill/dist/ stays out of src/scenes/AuthenticatedShell.tsx + src/scenes/project-homepage/ProjectHomepage.tsx + src/scenes/project-homepage/today/TodayHome.tsx
🟢 src/scenes/project-homepage/ai-first/AiFirstHomepage.tsx stays out of src/scenes/AuthenticatedShell.tsx + src/scenes/project-homepage/ProjectHomepage.tsx + src/scenes/project-homepage/today/TodayHome.tsx
🟢 src/scenes/project-homepage/today/TodayReportPage.tsx stays out of src/scenes/AuthenticatedShell.tsx + src/scenes/project-homepage/ProjectHomepage.tsx + src/scenes/project-homepage/today/TodayHome.tsx
🟢 src/queries/Query/Query.tsx stays out of src/scenes/AuthenticatedShell.tsx + src/scenes/project-homepage/ProjectHomepage.tsx + src/scenes/project-homepage/today/TodayHome.tsx
🟢 packages/quill/packages/charts/ stays out of src/scenes/AuthenticatedShell.tsx + src/scenes/project-homepage/ProjectHomepage.tsx + src/scenes/project-homepage/today/TodayHome.tsx
🟢 packages/quill/packages/quill/dist/ stays out of src/scenes/AuthenticatedShell.tsx + src/scenes/project-homepage/ProjectHomepage.tsx + src/scenes/project-homepage/ai-first/AiFirstHomepage.tsx
🟢 products/posthog_ai/frontend/components/tool/widgets/VisualizationWidget.tsx stays out of src/scenes/AuthenticatedShell.tsx + src/scenes/project-homepage/ProjectHomepage.tsx + src/scenes/project-homepage/ai-first/AiFirstHomepage.tsx
🟢 products/posthog_ai/frontend/components/tool/widgets/RecordingsWidget.tsx stays out of src/scenes/AuthenticatedShell.tsx + src/scenes/project-homepage/ProjectHomepage.tsx + src/scenes/project-homepage/ai-first/AiFirstHomepage.tsx
🟢 src/queries/Query/Query.tsx stays out of src/scenes/AuthenticatedShell.tsx + src/scenes/project-homepage/ProjectHomepage.tsx + src/scenes/project-homepage/ai-first/AiFirstHomepage.tsx
🟢 products/posthog_ai/frontend/api/primitives.ts stays out of src/scenes/AuthenticatedShell.tsx + src/scenes/project-homepage/ProjectHomepage.tsx + src/scenes/project-homepage/ai-first/AiFirstHomepage.tsx
🟢 src/scenes/notebooks/Notebook/notebookLogic.ts stays out of src/scenes/AuthenticatedShell.tsx + src/scenes/project-homepage/ProjectHomepage.tsx + src/scenes/project-homepage/ai-first/AiFirstHomepage.tsx
🟢 packages/quill/packages/quill/dist/ stays out of src/scenes/activity/explore/EventsScene.tsx
🟢 src/scenes/session-recordings/playlist/SessionRecordingsPlaylist.tsx stays out of src/scenes/activity/explore/EventsScene.tsx
🟢 src/scenes/web-analytics/tiles/WebAnalyticsTile.tsx stays out of src/scenes/activity/explore/EventsScene.tsx
🟢 src/queries/validators.js stays out of src/scenes/activity/explore/EventsScene.tsx
🟢 src/queries/web-analytics-validators.js stays out of src/scenes/activity/explore/EventsScene.tsx
🟢 node_modules/re2js/ stays out of src/scenes/activity/explore/EventsScene.tsx
🟢 node_modules/kea-test-utils/ stays out of src/scenes/activity/explore/EventsScene.tsx
🟢 src/queries/nodes/InsightViz/InsightViz.tsx stays out of src/scenes/activity/explore/EventsScene.tsx
🟢 src/queries/nodes/DataVisualization/DataVisualization.tsx stays out of src/scenes/activity/explore/EventsScene.tsx
🟢 src/queries/nodes/WebOverview/WebOverview.tsx stays out of src/scenes/activity/explore/EventsScene.tsx
🟢 src/scenes/debug/HogDebug.tsx stays out of src/scenes/activity/explore/EventsScene.tsx
🟢 src/queries/QueryEditor/QueryEditor.tsx stays out of src/scenes/activity/explore/EventsScene.tsx
🟢 packages/quill/packages/quill/dist/ stays out of src/scenes/web-analytics/WebAnalyticsScene.tsx
🟢 src/scenes/web-analytics/LiveMetricsDashboard/LiveWebAnalyticsMetrics.tsx stays out of src/scenes/web-analytics/WebAnalyticsScene.tsx
🟢 products/product_analytics/frontend/insights/trends/WorldMap/countryVectors.tsx stays out of src/scenes/web-analytics/WebAnalyticsScene.tsx
🟢 src/queries/validators.js stays out of src/scenes/web-analytics/WebAnalyticsScene.tsx
🟢 node_modules/re2js/ stays out of src/scenes/web-analytics/WebAnalyticsScene.tsx
🟢 node_modules/kea-test-utils/ stays out of src/scenes/web-analytics/WebAnalyticsScene.tsx
🟢 src/scenes/debug/HogDebug.tsx stays out of src/scenes/web-analytics/WebAnalyticsScene.tsx
🟢 src/queries/QueryEditor/QueryEditor.tsx stays out of src/scenes/web-analytics/WebAnalyticsScene.tsx
🟢 packages/quill/packages/quill/dist/ stays out of src/scenes/session-recordings/detail/SessionRecordingDetail.tsx
🟢 src/scenes/settings/SettingsMap.tsx stays out of src/scenes/session-recordings/detail/SessionRecordingDetail.tsx
🟢 @jspm/core/nodelibs/browser/fs stays out of src/scenes/session-recordings/detail/SessionRecordingDetail.tsx
🟢 node_modules/re2js/ stays out of src/scenes/session-recordings/detail/SessionRecordingDetail.tsx
🟢 node_modules/kea-test-utils/ stays out of src/scenes/session-recordings/detail/SessionRecordingDetail.tsx
🟢 node_modules/d3/src/ stays out of src/scenes/session-recordings/detail/SessionRecordingDetail.tsx

Largest files eagerly shipped from src/index.tsx
Size File
126.8 KiB ../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.production.min.js
24.6 KiB ../node_modules/.pnpm/buffer@6.0.3/node_modules/buffer/index.js
6.3 KiB ../node_modules/.pnpm/react@18.3.1/node_modules/react/cjs/react.production.min.js
4.7 KiB ../node_modules/.pnpm/@jspm+core@2.1.0/node_modules/@jspm/core/nodelibs/browser/process.js
4.0 KiB ../node_modules/.pnpm/scheduler@0.23.2/node_modules/scheduler/cjs/scheduler.production.min.js
1.9 KiB src/lib/utils/bootTiming.ts
1.7 KiB src/index.tsx
1.7 KiB ../node_modules/.pnpm/base64-js@1.5.1/node_modules/base64-js/index.js
1.2 KiB src/RootErrorBoundary.tsx
1.1 KiB src/lib/utils/deferredAppContext.ts
Largest files eagerly shipped from src/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts
Size File
355.5 KiB ../node_modules/.pnpm/posthog-js@1.444.4_@types+react@18.3.27_react@18.3.1/node_modules/posthog-js/dist/module.mjs
224.1 KiB ../node_modules/.pnpm/@posthog+icons@0.39.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@posthog/icons/dist/posthog-icons.es.js
126.8 KiB ../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.production.min.js
104.2 KiB src/products.tsx
88.3 KiB src/lib/api.ts
68.7 KiB src/lib/lemon-ui/icons/icons.tsx
41.9 KiB ../node_modules/.pnpm/@dnd-kit+core@6.0.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@dnd-kit/core/dist/core.esm.js
36.4 KiB ../node_modules/.pnpm/kea@4.0.0-pre.6_patch_hash=139b8d1f1304f9d9da452a9a1244c94ea679dbcb85687d8999563146879fb6f5_react@18.3.1/node_modules/kea/lib/index.cjs.js
28.3 KiB src/lib/constants.tsx
24.6 KiB ../node_modules/.pnpm/buffer@6.0.3/node_modules/buffer/index.js
Largest files eagerly shipped from src/scenes/AuthenticatedShell.tsx
Size File
355.5 KiB ../node_modules/.pnpm/posthog-js@1.444.4_@types+react@18.3.27_react@18.3.1/node_modules/posthog-js/dist/module.mjs
224.1 KiB ../node_modules/.pnpm/@posthog+icons@0.39.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@posthog/icons/dist/posthog-icons.es.js
126.8 KiB ../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.production.min.js
104.2 KiB src/products.tsx
88.3 KiB src/lib/api.ts
68.7 KiB src/lib/lemon-ui/icons/icons.tsx
41.9 KiB ../node_modules/.pnpm/@dnd-kit+core@6.0.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@dnd-kit/core/dist/core.esm.js
36.4 KiB ../node_modules/.pnpm/kea@4.0.0-pre.6_patch_hash=139b8d1f1304f9d9da452a9a1244c94ea679dbcb85687d8999563146879fb6f5_react@18.3.1/node_modules/kea/lib/index.cjs.js
32.7 KiB src/lib/utils/eventUsageLogic.ts
28.3 KiB src/lib/constants.tsx
Largest files eagerly shipped from src/scenes/dashboard/Dashboard.tsx
Size File
355.5 KiB ../node_modules/.pnpm/posthog-js@1.444.4_@types+react@18.3.27_react@18.3.1/node_modules/posthog-js/dist/module.mjs
224.1 KiB ../node_modules/.pnpm/@posthog+icons@0.39.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@posthog/icons/dist/posthog-icons.es.js
126.8 KiB ../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.production.min.js
114.5 KiB ../node_modules/.pnpm/posthog-js@1.444.4_@types+react@18.3.27_react@18.3.1/node_modules/posthog-js/dist/surveys-preview.js
108.9 KiB ../packages/quill/packages/primitives/dist/index.js
104.2 KiB src/products.tsx
94.6 KiB ../node_modules/.pnpm/@tiptap+core@3.20.6_@tiptap+pm@3.20.6/node_modules/@tiptap/core/dist/index.js
92.6 KiB ../node_modules/.pnpm/prosemirror-view@1.40.1/node_modules/prosemirror-view/dist/index.js
90.4 KiB ../packages/quill/packages/components/dist/index.js
88.3 KiB src/lib/api.ts
Largest files eagerly shipped from src/scenes/AuthenticatedShell.tsx + src/scenes/project-homepage/ProjectHomepage.tsx + src/scenes/project-homepage/today/TodayHome.tsx
Size File
355.5 KiB ../node_modules/.pnpm/posthog-js@1.444.4_@types+react@18.3.27_react@18.3.1/node_modules/posthog-js/dist/module.mjs
224.1 KiB ../node_modules/.pnpm/@posthog+icons@0.39.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@posthog/icons/dist/posthog-icons.es.js
126.8 KiB ../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.production.min.js
108.9 KiB ../packages/quill/packages/primitives/dist/index.js
104.2 KiB src/products.tsx
88.3 KiB src/lib/api.ts
68.7 KiB src/lib/lemon-ui/icons/icons.tsx
68.0 KiB ../products/posthog_ai/frontend/logics/runStreamLogic.ts
41.9 KiB ../node_modules/.pnpm/@dnd-kit+core@6.0.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@dnd-kit/core/dist/core.esm.js
36.4 KiB ../node_modules/.pnpm/kea@4.0.0-pre.6_patch_hash=139b8d1f1304f9d9da452a9a1244c94ea679dbcb85687d8999563146879fb6f5_react@18.3.1/node_modules/kea/lib/index.cjs.js
Largest files eagerly shipped from src/scenes/AuthenticatedShell.tsx + src/scenes/project-homepage/ProjectHomepage.tsx + src/scenes/project-homepage/ai-first/AiFirstHomepage.tsx
Size File
355.5 KiB ../node_modules/.pnpm/posthog-js@1.444.4_@types+react@18.3.27_react@18.3.1/node_modules/posthog-js/dist/module.mjs
224.1 KiB ../node_modules/.pnpm/@posthog+icons@0.39.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@posthog/icons/dist/posthog-icons.es.js
126.8 KiB ../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.production.min.js
108.9 KiB ../packages/quill/packages/primitives/dist/index.js
104.2 KiB src/products.tsx
88.3 KiB src/lib/api.ts
68.7 KiB src/lib/lemon-ui/icons/icons.tsx
68.0 KiB ../products/posthog_ai/frontend/logics/runStreamLogic.ts
41.9 KiB ../node_modules/.pnpm/@dnd-kit+core@6.0.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@dnd-kit/core/dist/core.esm.js
41.7 KiB src/scenes/hog-functions/sub-templates/sub-templates.ts
Largest files eagerly shipped from src/scenes/activity/explore/EventsScene.tsx
Size File
355.5 KiB ../node_modules/.pnpm/posthog-js@1.444.4_@types+react@18.3.27_react@18.3.1/node_modules/posthog-js/dist/module.mjs
224.1 KiB ../node_modules/.pnpm/@posthog+icons@0.39.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@posthog/icons/dist/posthog-icons.es.js
126.8 KiB ../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.production.min.js
108.9 KiB ../packages/quill/packages/primitives/dist/index.js
104.2 KiB src/products.tsx
94.6 KiB ../node_modules/.pnpm/@tiptap+core@3.20.6_@tiptap+pm@3.20.6/node_modules/@tiptap/core/dist/index.js
92.6 KiB ../node_modules/.pnpm/prosemirror-view@1.40.1/node_modules/prosemirror-view/dist/index.js
90.4 KiB ../packages/quill/packages/components/dist/index.js
88.3 KiB src/lib/api.ts
75.3 KiB src/scenes/dashboard/dashboardLogic.tsx
Largest files eagerly shipped from src/scenes/web-analytics/WebAnalyticsScene.tsx
Size File
355.5 KiB ../node_modules/.pnpm/posthog-js@1.444.4_@types+react@18.3.27_react@18.3.1/node_modules/posthog-js/dist/module.mjs
224.1 KiB ../node_modules/.pnpm/@posthog+icons@0.39.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@posthog/icons/dist/posthog-icons.es.js
126.8 KiB ../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.production.min.js
114.5 KiB ../node_modules/.pnpm/posthog-js@1.444.4_@types+react@18.3.27_react@18.3.1/node_modules/posthog-js/dist/surveys-preview.js
108.9 KiB ../packages/quill/packages/primitives/dist/index.js
104.2 KiB src/products.tsx
94.6 KiB ../node_modules/.pnpm/@tiptap+core@3.20.6_@tiptap+pm@3.20.6/node_modules/@tiptap/core/dist/index.js
92.6 KiB ../node_modules/.pnpm/prosemirror-view@1.40.1/node_modules/prosemirror-view/dist/index.js
90.4 KiB ../packages/quill/packages/components/dist/index.js
88.3 KiB src/lib/api.ts
Largest files eagerly shipped from src/scenes/session-recordings/detail/SessionRecordingDetail.tsx
Size File
355.5 KiB ../node_modules/.pnpm/posthog-js@1.444.4_@types+react@18.3.27_react@18.3.1/node_modules/posthog-js/dist/module.mjs
321.5 KiB ../node_modules/.pnpm/posthog-js@1.444.4_@types+react@18.3.27_react@18.3.1/node_modules/posthog-js/dist/rrweb.js
224.1 KiB ../node_modules/.pnpm/@posthog+icons@0.39.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@posthog/icons/dist/posthog-icons.es.js
126.8 KiB ../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.production.min.js
108.9 KiB ../packages/quill/packages/primitives/dist/index.js
104.2 KiB src/products.tsx
94.6 KiB ../node_modules/.pnpm/@tiptap+core@3.20.6_@tiptap+pm@3.20.6/node_modules/@tiptap/core/dist/index.js
92.6 KiB ../node_modules/.pnpm/prosemirror-view@1.40.1/node_modules/prosemirror-view/dist/index.js
90.4 KiB ../packages/quill/packages/components/dist/index.js
88.3 KiB src/lib/api.ts

Posted automatically by check-eager-graph · sizes are eager output bytes (shipped, post-tree-shake) from the esbuild metafile · part of #32479

✅ Frontend layers — no new upward imports, 7 removed

Static imports from a lower frontend layer into a higher one (layers, lowest first: kernel, shell, query, features). Compared with the base branch, so an import that a PR also adds to layer-baseline.txt still shows here. Sizes are the source bytes on the eager path of every logged-in page.

Layer Eager source bytes Δ vs base
kernel 2.97 MiB 🔺 +9.3 KiB (+0.3%)
shell 2.39 MiB 🔺 +3.5 KiB (+0.1%)
query 56.4 KiB no change
features 378.4 KiB 🟢 -155.6 KiB (-29.1%)

🟢 7 upward import(s) removed. Run hogli lint:frontend-layers --prune-baseline if CI asks.

Download the interactive layer graph for this PR.

Posted automatically by check-layers

✅ Toolbar bundle — eager 2.37 MiB within budget

What the toolbar ships to customer pages, measured from the esbuild output (minified, post-tree-shake). The eager set is the entry plus everything statically imported from it — fetched before any feature runs; deferred chunks load lazily. The eager guardrail is 5.72 MiB. Each output file must also stay below 10 MB, where CloudFront stops compressing it. The module boundary is enforced separately by check-toolbar-graph.

Metric Size Δ vs base Budget
Eager (shipped)
entry + static imports
2.37 MiB · 19 files 🔺 +32.2 KiB (+1.3%) ████░░░░░░ 41.4% of 5.72 MiB
Deferred (lazy) 2.11 MiB · 42 files no change n/a — loads on demand
Loader dist/toolbar.js 1.2 KiB no change █░░░░░░░░░ 6.0% of 19.5 KiB
Largest eagerly-shipped chunks
Size File
946.6 KiB dist/toolbar/toolbar-app-XENNRF6Q.css
726.8 KiB dist/toolbar/chunk-chunk-GWJRRCJ3.js
261.2 KiB dist/toolbar/chunk-chunk-FTMGICRW.js
131.8 KiB dist/toolbar/chunk-chunk-FDH2IBXT.js
130.3 KiB dist/toolbar/chunk-chunk-ZMBVIGNU.js
75.7 KiB dist/toolbar/toolbar-app-24PCUKWF.js
69.0 KiB dist/toolbar/chunk-chunk-TSAL54PB.js
33.8 KiB dist/toolbar/chunk-chunk-C2JAWSHT.js
21.7 KiB dist/toolbar/chunk-chunk-J6CJJ75S.js
6.8 KiB dist/toolbar/chunk-chunk-DV7IWQNF.js

Posted automatically by check-toolbar-size · sizes are toolbar output bytes (shipped, post-tree-shake) from the esbuild metafile

✅ Dist folder size — 🟢 -767.9 KiB (-0.1%)

Total size of the built frontend/dist folder (all assets), compared against the base branch.

Total: 969.01 MiB · 🟢 -767.9 KiB (-0.1%)

ℹ️ MCP UI apps size — 35 app(s), 29126.7 KB JS

Built size of each MCP UI app (main.js + styles.css).

App JS CSS
debug 844.4 KB 211.6 KB
explain-chart 1119.2 KB 211.6 KB
action 767.8 KB 211.6 KB
action-list 835.4 KB 211.6 KB
cohort 766.8 KB 211.6 KB
cohort-list 834.4 KB 211.6 KB
email-template 766.6 KB 211.6 KB
error-details 771.7 KB 211.6 KB
error-issue 769.0 KB 211.6 KB
error-issue-list 836.8 KB 211.6 KB
experiment 832.5 KB 211.6 KB
experiment-list 836.1 KB 211.6 KB
experiment-results 834.3 KB 211.6 KB
feature-flag 834.8 KB 211.6 KB
feature-flag-list 838.5 KB 211.6 KB
feature-flag-testing 770.0 KB 211.6 KB
inline-scan 767.2 KB 211.6 KB
insight-actors 833.8 KB 211.6 KB
llm-costs 831.1 KB 211.6 KB
session-recording 769.0 KB 211.6 KB
survey 768.4 KB 211.6 KB
survey-global-stats 831.2 KB 211.6 KB
survey-list 836.1 KB 211.6 KB
survey-stats 831.2 KB 211.6 KB
trace-span 767.1 KB 211.6 KB
trace-span-list 835.3 KB 211.6 KB
vision-observation-list 834.5 KB 211.6 KB
workflow 767.1 KB 211.6 KB
workflow-list 834.7 KB 211.6 KB
workflow-setup-status 766.8 KB 211.6 KB
query-results 1090.8 KB 211.6 KB
render-ui 1195.1 KB 211.6 KB
visual-review-snapshots 771.6 KB 211.6 KB
workflow-data-suggestions 769.4 KB 211.6 KB
workflow-sending-rules 768.1 KB 211.6 KB
ℹ️ MCP agent API — agent-facing tool changes

What this PR changes for agents, from the tool schema snapshots and tool definitions.

Tools changed (2):

Tool Params Scopes Annotations Schema chars
project-settings-update 77,922 -> 78,175
workflows-sending-rules-update +marketing_frequency_cap_hold_hours 1,629 -> 1,970
✅ Playwright — all passed

All tests passed.

View test results →

⚠️ Django migration SQL — 1 new migration to review

We've detected new migrations on this PR. Review the SQL output for each migration:

products/workflows/backend/migrations/0040_team_workflows_config_frequency_cap_hold.py

/home/runner/work/tmp/tool_cache/Python/3.14.7/x64/lib/python3.14/site-packages/anyio/from_thread.py:119: SyntaxWarning: 'return' in a 'finally' block
  return result
2026-11-03T09:54:17.633655Z [error    ] Path must be a valid database or directory containing databases. [posthog.exceptions_capture] pid=6224 tid=140389961173888
Traceback (most recent call last):
  File "/home/runner/work/posthog/posthog/posthog/geoip.py", line 15, in <module>
    geoip: Optional[GeoIP2] = GeoIP2(cache=8)
                              ~~~~~~^^^^^^^^^
  File "/home/runner/work/tmp/tool_cache/Python/3.14.7/x64/lib/python3.14/site-packages/django/contrib/gis/geoip2.py", line 114, in __init__
    raise GeoIP2Exception(
        "Path must be a valid database or directory containing databases."
    )
django.contrib.gis.geoip2.GeoIP2Exception: Path must be a valid database or directory containing databases.
/home/runner/work/tmp/tool_cache/Python/3.14.7/x64/lib/python3.14/site-packages/sshtunnel.py:1040: SyntaxWarning: 'return' in a 'finally' block
  return (ssh_host,
/home/runner/work/tmp/tool_cache/Python/3.14.7/x64/lib/python3.14/site-packages/langchain_core/_api/deprecation.py:27: UserWarning: Core Pydantic V1 functionality isn't compatible with Python 3.14 or greater.
  from pydantic.v1.fields import FieldInfo as FieldInfoV1
System check identified some issues:

WARNINGS:
?: (axes.W001) You are using the django-axes cache handler for login attempt tracking. Your cache configuration is however invalid and will not work correctly with django-axes. This can leave security holes in your login systems as attempts are not tracked correctly. Reconfigure settings.AXES_CACHE and settings.CACHES per django-axes configuration documentation.
?: (staticfiles.W004) The directory '/home/runner/work/posthog/posthog/frontend/dist' in the STATICFILES_DIRS setting does not exist.
BEGIN;
--
-- Add field marketing_frequency_cap_hold_hours to teamworkflowsconfig
--
ALTER TABLE "workflows_teamworkflowsconfig" ADD COLUMN "marketing_frequency_cap_hold_hours" integer NULL;
COMMIT;

Last updated: 2026-11-03 09:55 UTC (bf327f8)

✅ Django migration risk — migration analysis complete

We've analyzed your migrations for potential risks.

Summary: 1 Safe | 0 Needs Review | 0 Blocked

✅ Safe

Brief or no lock, backwards compatible

workflows.0040_team_workflows_config_frequency_cap_hold
  └─ #1 ✅ AddField
     Adding nullable field requires brief lock
     model: teamworkflowsconfig, field: marketing_frequency_cap_hold_hours

📚 How to Deploy These Changes Safely

AddField:

This operation acquires a brief lock but doesn't rewrite the table.

Deployment uses lock timeouts with automatic retries, so lock contention will cause retries rather than connection pile-up.

Last updated: 2026-11-03 09:55 UTC (bf327f8)

Moves the settings field down from the worker layer, so each PR in the stack stays in one merge queue lane.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

Generated-By: PostHog Desktop
Task-Id: 436ae568-8289-4257-b029-99ab5ab69aac
@mayteio

mayteio commented Nov 3, 2026

Copy link
Copy Markdown
Contributor Author

@PostHog review

@mayteio
mayteio marked this pull request as ready for review November 3, 2026 09:00
@posthog

posthog Bot commented Nov 3, 2026

Copy link
Copy Markdown
Contributor

@mayteio PostHog Review is reviewing this pull request.

@parameterai

parameterai Bot commented Nov 3, 2026 •

Copy link
Copy Markdown

Risk: No findings

The increment since the last review is purely test coverage: two expected-response assertions in test_team_workflows_config.py now include the new marketing_frequency_cap_hold_hours field. No production code changed, so no new security surface was introduced.

Sentinel reviewed bf327f8 · Review settings

@pr-assigner-resolver-posthog
pr-assigner-resolver-posthog Bot requested a review from a team November 3, 2026 09:00

@posthog posthog Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PostHog Review · Standard · reviewed fdd0da1: 1 Should fix.

See this review and its findings in PostHog Review. Comment @posthog review --deep for a Deep review. A Deep review takes longer and looks deeper than a Standard review.

Comment thread posthog/api/team/team_config.py Resolved
@github-actions

github-actions Bot commented Nov 3, 2026 •

Copy link
Copy Markdown
Contributor

React Doctor found no issues in the changed files. 🎉

Reviewed by React Doctor for commit bf327f8.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

Generated-By: PostHog Desktop
Task-Id: 436ae568-8289-4257-b029-99ab5ab69aac
@mayteio mayteio added the stamphog Request AI approval (no full review) label Nov 3, 2026 — with PostHog

@stamphog stamphog Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not approved yet — waiting on the conditions below.

The Migration risk check has not finished for this commit, so stamphog cannot tell a safe migration from a risky one yet. The review runs again on the next push, or you can re-request it once the check reports.

  • 1 of the 22 changed files are governed by products/desktop/AGENT_APPROVALS.md.
Gate mechanics and policy version
Gate Result
prerequisites ✓ all clear
deny-list ✗ matches: migrations
size ✓ 97L, 10F substantive, 219L/22F incl. docs/generated/snapshots — within ceiling
tier ✗ classified as T2-never: T2-never (219L, 22F, cross-cutting, feat)
stamphog 2.7.0 .stamphog/policy.yml @ unknown · reviewed head bf327f8

@mayteio mayteio removed the stamphog Request AI approval (no full review) label Nov 3, 2026
@mayteio mayteio added the stamphog Request AI approval (no full review) label Nov 3, 2026 — with PostHog

@stamphog stamphog Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approved.

The migration and API/write-path changes have assurance through owning-team authorship and STRONG familiarity, with round-trip test coverage. No concrete unresolved review concerns or other refusal grounds were identified; the older review supplies no actionable finding to verify.

  • Author wrote 75% of the modified lines and has 63 merged PRs in these paths (familiarity STRONG).
  • 1 of the 22 changed files are governed by products/desktop/AGENT_APPROVALS.md.
Gate mechanics and policy version
Gate Result
prerequisites ✓ all clear
deny-list ✓ no deny categories matched
size ✓ 97L, 10F substantive, 219L/22F incl. docs/generated/snapshots — within ceiling
tier ✓ T1-agent / T1d-complex (219L, 22F, cross-cutting, feat)
stamphog 2.7.0 .stamphog/policy.yml @ bf327f8 · reviewed head bf327f8

@trunk-io

trunk-io Bot commented Nov 3, 2026

Copy link
Copy Markdown

This pull request is queued for merge as part of 127579, which will merge 127592, 127579.

mayteio commented Nov 3, 2026

Copy link
Copy Markdown
Contributor Author

/trunk merge

@trunk-io

trunk-io Bot commented Nov 3, 2026

Copy link
Copy Markdown

An error occurred while submitting your PR to the queue: PR #127579, above this one in the same stack, is already in the merge queue as a stack that includes this pull request and will merge it. Wait for it to finish, or run /trunk cancel on #127579 first.

@trunk-io
trunk-io Bot merged commit b69457d into master Nov 3, 2026
380 of 381 checks passed
@trunk-io
trunk-io Bot deleted the posthog/workflows-frequency-cap-hold-setting branch November 3, 2026 10:38
@trunk-io

trunk-io Bot commented Nov 3, 2026

Copy link
Copy Markdown

This pull request was merged into master as part of stacked PR 127579.

@deployment-status-posthog

deployment-status-posthog Bot commented Nov 3, 2026 •

Copy link
Copy Markdown

Deploy status

Environment Status Deployed At Workflow
dev ✅ Deployed 2026-11-03 11:17 UTC Run
prod-us ✅ Deployed 2026-11-03 11:53 UTC Run
prod-eu ✅ Deployed 2026-11-03 11:48 UTC Run

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

stamphog Request AI approval (no full review)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants